/*
 * Copyright 2004-2005 asoft
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）* 复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.asoft.cn/licenses
 */

package com.asoft.common.base.web.service;

import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import com.asoft.common.logs.util.AsoftLogsException;
import com.asoft.common.util.valuelist.ValueListHandler;



/**
 * 查询横表服务
 *
 */

public abstract class AbstractListService extends AbstractFindService
{
        static Logger logger = Logger.getLogger(AbstractListService.class);

        /** 每页条数 */
        private int countPerPage = 0;

        /** 角色 */
        private String role;

        public String getRole()
        {
                return this.role;
        }

        public void setRole(String role)
        {
                this.role = role;
        }

        public void setCountPerPage(int countPerPage)
        {
                this.countPerPage = countPerPage;
        }

        /** 取得结果集合 */
        public abstract List getList(HttpServletRequest request);

        /** 执行服务 */
        public void executeService(HttpServletRequest request)
        {
                ValueListHandler vlh;
                if(this.countPerPage <= 0)
                {
                        vlh = new ValueListHandler(this.getList(request));
                }
                else
                {
                        vlh = new ValueListHandler(this.getList(request),this.countPerPage);
                }
                logger.debug("封装翻页器,并往结果页面传递参数");
                request.setAttribute("valueListHandler",vlh);// 必须,否则结果页面无法取得结果
                request.setAttribute("viewer",this.getViewer(request)); //设置返回viewer
        }

        /** model -> viewer */
        public abstract Object getViewer(HttpServletRequest request);

        /** Iterator 2 List */
        public List iterator2List(Iterator iterator)
        {
                List list = new Vector(100);
                while(iterator.hasNext())
                {
                        list.add(iterator.next());
                }
                return list;
        }

        /** 执行服务前（for 操作日志）*/
        public String getDetailBeforeExe(HttpServletRequest request)
        {
                throw new AsoftLogsException("方法public String getDetailBeforeExe(HttpServletRequest request) 未实现");
        }

        /** 执行服务后（for 操作日志）*/
        public String getDetailAfterExe(HttpServletRequest request)
        {
                throw new AsoftLogsException("方法public String getDetailAfterExe(HttpServletRequest request) 未实现");
        }
}
